REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 66.57 KB
Close
/opt/alt/python37/lib/python3.7/site-packages/alembic/operations/__pycache__/ops.cpython-37.pyc
Text
Base64
Qg0NCgAAAACMTSFW0RsBAOMAAAAAAAAAAAAAAAAGAAAAQAAAAHPKAgAAZABkAWwAbQFaAQEAZABkAmwBbQJaAgEAZANkBGwAbQNaAwEAZAVkBmwEbQVaBQEAZANkB2wGbQdaB20IWggBAGQFZAhsCVoJRwBkCWQKhABkCmUKgwNaC0cAZAtkDIQAZAxlC4MDWgxlB6ANZA2hAWUIoA1kDWQOoQJHAGQPZBCEAGQQZQuDA4MBgwFaDmUHoA1kEaEBZQigDWQRZBKhAkcAZBNkFIQAZBRlDIMDgwGDAVoPZQegDWQVoQFlCKANZBVkFqECRwBkF2QYhABkGGUMgwODAYMBWhBlB6ANZBmhAWUIoA1kGWQaoQJHAGQbZByEAGQcZQyDA4MBgwFaEWUHoA1kHaEBZQigDWQdZB6hAkcAZB9kIIQAZCBlDIMDgwGDAVoSZQegDWQhoQFlCKANZCFkIqECRwBkI2QkhABkJGULgwODAYMBWhNlB6ANZCWhAWUIoA1kJWQmoQJHAGQnZCiEAGQoZQuDA4MBgwFaFGUHoA1kKaEBRwBkKmQrhABkK2ULgwODAVoVZQegDWQsoQFHAGQtZC6EAGQuZQuDA4MBWhZHAGQvZDCEAGQwZQuDA1oXZQegDWQxoQFHAGQyZDOEAGQzZReDA4MBWhhlB6ANZDShAWUIoA1kNGQ1oQJHAGQ2ZDeEAGQ3ZReDA4MBgwFaGWUHoA1kOKEBZQigDWQ4ZDmhAkcAZDpkO4QAZDtlF4MDgwGDAVoaZQegDWQ8oQFlCKANZDxkPaECRwBkPmQ/hABkP2UXgwODAYMBWhtlB6ANZEChAUcAZEFkQoQAZEJlC4MDgwFaHGUHoA1kQ6EBRwBkRGRFhABkRWULgwODAVodRwBkRmRHhABkR2ULgwNaHkcAZEhkSYQAZEllHoMDWh9HAGRKZEuEAGRLZR6DA1ogRwBkTGRNhABkTWUegwNaIUcAZE5kT4QAZE9lC4MDWiJkCFMAKVDpAgAAACkB2gR1dGlsKQHaC3NxbGFfY29tcGF06QEAAAApAdoJc2NoZW1hb2Jq6QAAAAApAdoITlVMTFRZUEUpAtoKT3BlcmF0aW9uc9oPQmF0Y2hPcGVyYXRpb25zTmMAAAAAAAAAAAAAAAADAAAAQAAAAHMeAAAAZQBaAWQAWgJkAVoDZQRqBWQCZAOEAIMBWgZkBFMAKQXaEE1pZ3JhdGVPcGVyYXRpb25hFQEAAGJhc2UgY2xhc3MgZm9yIG1pZ3JhdGlvbiBjb21tYW5kIGFuZCBvcmdhbml6YXRpb24gb2JqZWN0cy4KCiAgICBUaGlzIHN5c3RlbSBpcyBwYXJ0IG9mIHRoZSBvcGVyYXRpb24gZXh0ZW5zaWJpbGl0eSBBUEkuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMC44LjAKCiAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgOnJlZjpgb3BlcmF0aW9uX29iamVjdHNgCgogICAgICAgIDpyZWY6YG9wZXJhdGlvbl9wbHVnaW5zYAoKICAgICAgICA6cmVmOmBjdXN0b21pemluZ19yZXZpc2lvbmAKCiAgICBjAQAAAAAAAAABAAAAAQAAAEMAAABzBAAAAGkAUwApAXqBQSBkaWN0aW9uYXJ5IHRoYXQgbWF5IGJlIHVzZWQgdG8gc3RvcmUgYXJiaXRyYXJ5IGluZm9ybWF0aW9uCiAgICAgICAgYWxvbmcgd2l0aCB0aGlzIDpjbGFzczpgLk1pZ3JhdGVPcGVyYXRpb25gIG9iamVjdC4KCiAgICAgICAgqQApAdoEc2VsZnILAAAAcgsAAAD6Ry9vcHQvYWx0L3B5dGhvbjM3L2xpYi9weXRob24zLjcvc2l0ZS1wYWNrYWdlcy9hbGVtYmljL29wZXJhdGlvbnMvb3BzLnB52gRpbmZvGgAAAHMCAAAAAAZ6FU1pZ3JhdGVPcGVyYXRpb24uaW5mb04pB9oIX19uYW1lX1/aCl9fbW9kdWxlX1/aDF9fcXVhbG5hbWVfX9oHX19kb2NfX3ICAAAAWhFtZW1vaXplZF9wcm9wZXJ0eXIOAAAAcgsAAAByCwAAAHILAAAAcg0AAAByCgAAAAkAAABzBAAAAAgPBAJyCgAAAGMAAAAAAAAAAAAAAAADAAAAQAAAAHM4AAAAZQBaAWQAWgJkAVoDZQRkAmQDhACDAVoFZQZkBGQFhACDAVoHZAZkB4QAWghkCGQJhABaCWQKUwApC9oPQWRkQ29uc3RyYWludE9weiZSZXByZXNlbnQgYW4gYWRkIGNvbnN0cmFpbnQgb3BlcmF0aW9uLmMBAAAAAAAAAAEAAAABAAAAQwAAAHMKAAAAdACDAIIBZABTACkBTikB2hNOb3RJbXBsZW1lbnRlZEVycm9yKQFyDAAAAHILAAAAcgsAAAByDQAAANoPY29uc3RyYWludF90eXBlJgAAAHMCAAAAAAJ6H0FkZENvbnN0cmFpbnRPcC5jb25zdHJhaW50X3R5cGVjAgAAAAAAAAADAAAABgAAAEMAAABzKAAAAHQAagF0AmoBdANqAXQEagF0BGoBZAGcBX0CfAJ8AWoFGQB8AYMBUwApAk4pBdoRdW5pcXVlX2NvbnN0cmFpbnTaFmZvcmVpZ25fa2V5X2NvbnN0cmFpbnTaFnByaW1hcnlfa2V5X2NvbnN0cmFpbnTaEGNoZWNrX2NvbnN0cmFpbnTaF2NvbHVtbl9jaGVja19jb25zdHJhaW50KQbaGENyZWF0ZVVuaXF1ZUNvbnN0cmFpbnRPcNoPZnJvbV9jb25zdHJhaW502hJDcmVhdGVGb3JlaWduS2V5T3DaEkNyZWF0ZVByaW1hcnlLZXlPcNoXQ3JlYXRlQ2hlY2tDb25zdHJhaW50T3DaDl9fdmlzaXRfbmFtZV9fKQPaA2Nsc9oKY29uc3RyYWludNoFZnVuY3NyCwAAAHILAAAAcg0AAAByHAAAACoAAABzDAAAAAADBAEEAQQBBAEKAnofQWRkQ29uc3RyYWludE9wLmZyb21fY29uc3RyYWludGMBAAAAAAAAAAEAAAAEAAAAQwAAAHMOAAAAdACgAXwAoAKhAKEBUwApAU4pA9oQRHJvcENvbnN0cmFpbnRPcHIcAAAA2g10b19jb25zdHJhaW50KQFyDAAAAHILAAAAcgsAAAByDQAAANoHcmV2ZXJzZTUAAABzAgAAAAABehdBZGRDb25zdHJhaW50T3AucmV2ZXJzZWMBAAAAAAAAAAEAAAADAAAAQwAAAHMMAAAAZAF8AKAAoQBmAlMAKQJOWg5hZGRfY29uc3RyYWludCkBciUAAAApAXIMAAAAcgsAAAByCwAAAHINAAAA2g10b19kaWZmX3R1cGxlOAAAAHMCAAAAAAF6HUFkZENvbnN0cmFpbnRPcC50b19kaWZmX3R1cGxlTikKcg8AAAByEAAAAHIRAAAAchIAAADaCHByb3BlcnR5chUAAADaC2NsYXNzbWV0aG9kchwAAAByJgAAAHInAAAAcgsAAAByCwAAAHILAAAAcg0AAABy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CiAgICAgICAgOnBhcmFtIHNjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgdG8gb3BlcmF0ZSB3aXRoaW4uICBUbyBjb250cm9sCiAgICAgICAgIHF1b3Rpbmcgb2YgdGhlIHNjaGVtYSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB1c2UKICAgICAgICAgdGhlIFNRTEFsY2hlbXkgY29uc3RydWN0CiAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYC4KCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuNy4wICdzY2hlbWEnIGNhbiBub3cgYWNjZXB0IGEKICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zcWwuZWxlbWVudHMucXVvdGVkX25hbWVgIGNvbnN0cnVjdC4KCiAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAwLjguMCBUaGUgZm9sbG93aW5nIHBvc2l0aW9uYWwgYXJndW1lbnQgbmFtZXMKICAgICAgICAgICBoYXZlIGJlZW4gY2hhbmdlZDoKCiAgICAgICAgICAgKiBuYW1lIC0+IGNvbnN0cmFpbnRfbmFtZQoKICAgICAgICApAnIwAAAAci4AAAApAdoGaW52b2tlKQdyIQAAANoKb3BlcmF0aW9uc3IsAAAAci0AAAByMAAAAHIuAAAA2gJvcHILAAAAcgsAAAByDQAAAHIqAAAAcwAAAHMEAAAAAB0QAXogRHJvcENvbnN0cmFpbnRPcC5kcm9wX2NvbnN0cmFpbnRjBAAAAAAAAAAFAAAABgAAAEMAAABzIgAAAHwAfAJ8AWoAagF8A3wBagBqAmQBjQR9BHwBoAN8BKEBUwApAmGmAQAASXNzdWUgYSAiZHJvcCBjb25zdHJhaW50IiBpbnN0cnVjdGlvbiB1c2luZyB0aGUKICAgICAgICBjdXJyZW50IGJhdGNoIG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICBUaGUgYmF0Y2ggZm9ybSBvZiB0aGlzIGNhbGwgb21pdHMgdGhlIGBgdGFibGVfbmFtZWBgIGFuZCBgYHNjaGVtYWBgCiAgICAgICAgYXJndW1lbnRzIGZy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KQoKICAgICAgICBUaGlzIGludGVybmFsbHkgZ2VuZXJhdGVzIGEgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuVGFibGVgIG9iamVjdAogICAgICAgIGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBjb2x1bW5zLCB0aGVuIGdlbmVyYXRlcyBhIG5ldwogICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlByaW1hcnlLZXlDb25zdHJhaW50YAogICAgICAgIG9iamVjdCB3aGljaCBpdCB0aGVuIGFzc29jaWF0ZXMgd2l0aCB0aGUKICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5UYWJsZWAuCiAgICAgICAgQW55IGV2ZW50IGxpc3RlbmVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY3Rpb24gd2lsbCBiZSBmaXJlZAogICAgICAgIG9mZiBub3JtYWxseS4gICBUaGUgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQWRkQ29uc3RyYWludGAKICAgICAgICBjb25zdHJ1Y3QgaXMgdWx0aW1hdGVseSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBBTFRFUiBzdGF0ZW1lbnQuCgogICAgICAgIDpwYXJhbSBuYW1lOiBOYW1lIG9mIHRoZSBwcmltYXJ5IGtleSBjb25zdHJhaW50LiAgVGhlIG5hbWUgaXMgbmVjZXNzYXJ5CiAgICAgICAgIHNvIHRoYXQgYW4gQUxURVIgc3RhdGVtZW50IGNhbiBiZSBlbWl0dGVkLiAgRm9yIHNldHVwcyB0aGF0CiAgICAgICAgIHVzZSBhbiBhdXRvbWF0ZWQgbmFtaW5nIHNjaGVtZSBzdWNoIGFzIHRoYXQgZGVzY3JpYmVkIGF0CiAgICAgICAgIDpyZWY6YHNxbGE6Y29uc3RyYWludF9uYW1pbmdfY29udmVudGlvbnNgCiAgICAgICAgIGBgbmFtZWBgIGhlcmUgY2FuIGJlIGBgTm9uZWBgLCBhcyB0aGUgZXZlbnQgbGlzdGVuZXIgd2lsbAogICAgICAgICBhcHBseSB0aGUgbmFtZSB0byB0aGUgY29uc3RyYWludCBvYmplY3Qgd2hlbiBpdCBpcyBhc3NvY2lhdGVkCiAgICAgICAgIHdpdGggdGhlIHRhYmxlLgogICAgICAgIDpwYXJhbSB0YWJsZV9uYW1lOiBTdHJpbmcgbmFtZSBvZiB0aGUgdGFyZ2V0IHRhYmxlLgogICAgICAgIDpwYXJhbSBjb2x1bW5zOiBhIGxpc3Qgb2Ygc3RyaW5nIGNvbHVtbiBuYW1lcyB0byBiZSBhcHBsaWVkIHRvIHRoZQogICAgICAgICBwcmltYXJ5IGtleSBjb25zdHJhaW50LgogICAgICAgIDpwYXJhbSBzY2hlbWE6IE9wdGlvbmFsIHNjaGVtYSBuYW1lIHRvIG9wZXJhdGUgd2l0aGluLiAgVG8gY29udHJvbAogICAgICAgICBxdW90aW5nIG9mIHRoZSBzY2hlbWEgb3V0c2lkZSBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgdXNlCiAgICAgICAgIHRoZSBTUUxBbGNoZW15IGNvbnN0cnVjdAogICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNxbC5lbGVtZW50cy5xdW90ZWRfbmFtZWAuCgogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAwLjcuMCAnc2NoZW1hJyBjYW4gbm93IGFjY2VwdCBhCiAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYCBjb25zdHJ1Y3QuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMC44LjAgVGhlIGZvbGxvd2luZyBwb3NpdGlvbmFsIGFyZ3VtZW50IG5hbWVzCiAgICAgICAgICAgaGF2ZSBiZWVuIGNoYW5nZWQ6CgogICAgICAgICAgICogbmFtZSAtPiBjb25zdHJhaW50X25hbWUKICAgICAgICAgICAqIGNvbHMgLT4gY29sdW1ucwoKICAgICAgICApAXI7AAAAKQdyIQAAAHI8AAAAciwAAAByLQAAAHJCAAAAci4AAAByPQAAAHILAAAAcgsAAAByDQAAAHJAAAAA0wAAAHMEAAAAADUOAXolQ3JlYXRlUHJpbWFyeUtleU9wLmNyZWF0ZV9wcmltYXJ5X2tleWMEAAAAAAAAAAUAAAAGAAAAQwAAAHMiAAAAfAB8AnwBagBqAXwDfAFq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bG9jYWxfY29sc3JCAAAAYwYAAAAAAAAACAAAAAQAAABLAAAAcyIAAAB8AHwCfAN8BGYDZAF8BWkBfAaXAo4BfQd8AaAAfAehAVMAKQJhRwgAAElzc3VlIGEgImNyZWF0ZSB1bmlxdWUgY29uc3RyYWludCIgaW5zdHJ1Y3Rpb24gdXNpbmcgdGhlCiAgICAgICAgY3VycmVudCBtaWdyYXRpb24gY29udGV4dC4KCiAgICAgICAgZS5nLjo6CgogICAgICAgICAgICBmcm9tIGFsZW1iaWMgaW1wb3J0IG9wCiAgICAgICAgICAgIG9wLmNyZWF0ZV91bmlxdWVfY29uc3RyYWludCgidXFfdXNlcl9uYW1lIiwgInVzZXIiLCBbIm5hbWUiXSkKCiAgICAgICAgVGhpcyBpbnRlcm5hbGx5IGdlbmVyYXRlcyBhIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBvYmplY3QKICAgICAgICBjb250YWluaW5nIHRoZSBuZWNlc3NhcnkgY29sdW1ucywgdGhlbiBnZW5lcmF0ZXMgYSBuZXcKICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5VbmlxdWVDb25zdHJhaW50YAogICAgICAgIG9iamVjdCB3aGljaCBpdCB0aGVuIGFzc29jaWF0ZXMgd2l0aCB0aGUKICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5UYWJsZWAuCiAgICAgICAgQW55IGV2ZW50IGxpc3RlbmVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY3Rpb24gd2lsbCBiZSBmaXJlZAogICAgICAgIG9mZiBub3JtYWxseS4gICBUaGUgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQWRkQ29uc3RyYWludGAKICAgICAgICBjb25zdHJ1Y3QgaXMgdWx0aW1hdGVseSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBBTFRFUiBzdGF0ZW1lbnQuCgogICAgICAgIDpwYXJhbSBuYW1lOiBOYW1lIG9mIHRoZSB1bmlxdWUgY29uc3RyYWludC4gIFRoZSBuYW1lIGlzIG5lY2Vzc2FyeQogICAgICAgICBzbyB0aGF0IGFuIEFMVEVSIHN0YXRlbWVudCBjYW4gYmUgZW1pdHRlZC4gIEZvciBzZXR1cHMgdGhhdAogICAgICAgICB1c2UgYW4gYXV0b21hdGVkIG5hbWluZyBzY2hlbWUgc3VjaCBhcyB0aGF0IGRlc2NyaWJlZCBhdAogICAgICAgICA6cmVmOmBzcWxhOmNvbnN0cmFpbnRfbmFtaW5nX2NvbnZlbnRpb25zYCwKICAgICAgICAgYGBuYW1lYGAgaGVyZSBjYW4gYmUgYGBOb25lYGAsIGFzIHRoZSBldmVudCBsaXN0ZW5lciB3aWxsCiAgICAgICAgIGFwcGx5IHRoZSBuYW1lIHRvIHRoZSBjb25zdHJhaW50IG9iamVjdCB3aGVuIGl0IGlzIGFzc29jaWF0ZWQKICAgICAgICAgd2l0aCB0aGUgdGFibGUuCiAgICAgICAgOnBhcmFtIHRhYmxlX25hbWU6IFN0cmluZyBuYW1lIG9mIHRoZSBzb3VyY2UgdGFibGUuCiAgICAgICAgOnBhcmFtIGNvbHVtbnM6IGEgbGlzdCBvZiBzdHJpbmcgY29sdW1uIG5hbWVzIGluIHRoZQogICAgICAgICBzb3VyY2UgdGFibGUuCiAgICAgICAgOnBhcmFtIGRlZmVycmFibGU6IG9wdGlvbmFsIGJvb2wuIElmIHNldCwgZW1pdCBERUZFUlJBQkxFIG9yCiAgICAgICAgIE5PVCBERUZFUlJBQkxFIHdoZW4gaXNzdWluZyBEREwgZm9yIHRoaXMgY29uc3RyYWludC4KICAgICAgICA6cGFyYW0gaW5pdGlhbGx5OiBvcHRpb25hbCBzdHJpbmcuIElmIHNldCwgZW1pdCBJTklUSUFMTFkgPHZhbHVlPgogICAgICAgICB3aGVuIGlzc3VpbmcgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuCiAgICAgICAgOnBhcmFtIHNjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgdG8gb3BlcmF0ZSB3aXRoaW4uICBUbyBjb250cm9sCiAgICAgICAgIHF1b3Rpbmcgb2YgdGhlIHNjaGVtYSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB1c2UKICAgICAgICAgdGhlIFNRTEFsY2hlbXkgY29uc3RydWN0CiAgICAg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AQAAcxAAAAAAAQoBBgEKAQQBBAEIAQoBeiBDcmVhdGVGb3JlaWduS2V5T3AudG9fY29uc3RyYWludCkCcjcAAAByLAAAACkCck8AAAByUwAAACkCWghyZWZlcmVudHJUAAAAYw4AAAAAAAAAEAAAAAoAAABLAAAAczIAAAB8AHwCfAN8BHwFfAZmBXwHfAh8CXwMfA18CnwLZAGcB3wOlwKOAX0PfAGgAHwPoQFTACkCYVcJAABJc3N1ZSBhICJjcmVhdGUgZm9yZWlnbiBrZXkiIGluc3RydWN0aW9uIHVzaW5nIHRoZQogICAgICAgIGN1cnJlbnQgbWlncmF0aW9uIGNvbnRleHQuCgogICAgICAgIGUuZy46OgoKICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAogICAgICAgICAgICBvcC5jcmVhdGVfZm9yZWlnbl9rZXkoCiAgICAgICAgICAgICAgICAgICAgICAgICJma191c2VyX2FkZHJlc3MiLCAiYWRkcmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1c2VyIiwgWyJ1c2VyX2lkIl0sIFsiaWQiXSkKCiAgICAgICAgVGhpcyBpbnRlcm5hbGx5IGdlbmVyYXRlcyBhIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBvYmplY3QKICAgICAgICBjb250YWluaW5nIHRoZSBuZWNlc3NhcnkgY29sdW1ucywgdGhlbiBnZW5lcmF0ZXMgYSBuZXcKICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5Gb3JlaWduS2V5Q29uc3RyYWludGAKICAgICAgICBvYmplY3Qgd2hpY2ggaXQgdGhlbiBhc3NvY2lhdGVzIHdpdGggdGhlCiAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuVGFibGVgLgogICAgICAgIEFueSBldmVudCBsaXN0ZW5lcnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWN0aW9uIHdpbGwgYmUgZmlyZWQKICAgICAgICBvZmYgbm9ybWFsbHkuICAgVGhlIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLkFkZENvbnN0cmFpbnRgCiAgICAgICAgY29uc3RydWN0IGlzIHVsdGltYXRlbHkgdXNlZCB0byBnZW5lcmF0ZSB0aGUgQUxURVIgc3RhdGVtZW50LgoKICAgICAgICA6cGFyYW0gbmFtZTogTmFtZSBvZiB0aGUgZm9yZWlnbiBrZXkgY29uc3RyYWludC4gIFRoZSBuYW1lIGlzIG5lY2Vzc2FyeQogICAgICAgICBzbyB0aGF0IGFuIEFMVEVSIHN0YXRlbWVudCBjYW4gYmUgZW1pdHRlZC4gIEZvciBzZXR1cHMgdGhhdAogICAgICAgICB1c2UgYW4gYXV0b21hdGVkIG5hbWluZyBzY2hlbWUgc3VjaCBhcyB0aGF0IGRlc2NyaWJlZCBhdAogICAgICAgICA6cmVmOmBzcWxhOmNvbnN0cmFpbnRfbmFtaW5nX2NvbnZlbnRpb25zYCwKICAgICAgICAgYGBuYW1lYGAgaGVyZSBjYW4gYmUgYGBOb25lYGAsIGFzIHRoZSBldmVudCBsaXN0ZW5lciB3aWxsCiAgICAgICAgIGFwcGx5IHRoZSBuYW1lIHRvIHRoZSBjb25zdHJhaW50IG9iamVjdCB3aGVuIGl0IGlzIGFzc29jaWF0ZWQKICAgICAgICAgd2l0aCB0aGUgdGFibGUuCiAgICAgICAgOnBhcmFtIHNvdXJjZV90YWJsZTogU3RyaW5nIG5hbWUgb2YgdGhlIHNvdXJjZSB0YWJsZS4KICAgICAgICA6cGFyYW0gcmVmZXJlbnRfdGFibGU6IFN0cmluZyBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiB0YWJsZS4KICAgICAgICA6cGFyYW0gbG9jYWxfY29sczogYSBsaXN0IG9mIHN0cmluZyBjb2x1bW4gbmFtZXMgaW4gdGhlCiAgICAgICAgIHNvdXJjZSB0YWJsZS4KICAgICAgICA6cGFyYW0gcmVtb3RlX2NvbHM6IGEgbGlzdCBvZiBzdHJpbmcgY29sdW1uIG5hbWVzIGluIHRoZQogICAgICAgICByZW1vdGUgdGFibGUuCiAgICAgICAgOnBhcmFtIG9udXBkYXRlOiBPcHRpb25hbCBzdHJpbmcuIElmIHNldCwgZW1pdCBPTiBVUERBVEUgPHZhbHVlPiB3aGVuCiAgICAgICAgIGlzc3VpbmcgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuIFR5cGljYWwgdmFsdWVzIGluY2x1ZGUgQ0FTQ0FERSwKICAgICAgICAgREVMRVRFIGFuZCBSRVNUUklDVC4KICAgICAgICA6cGFyYW0gb25kZWxldGU6IE9wdGlvbmFsIHN0cmluZy4gSWYgc2V0LCBlbWl0IE9OIERFTEVURSA8dmFsdWU+IHdoZW4KICAgICAgICAgaXNzdWluZyBEREwgZm9yIHRoaXMgY29uc3RyYWludC4gVHlwaWNhbCB2YWx1ZXMgaW5jbHVkZSBDQVNDQURFLAogICAgICAgICBERUxFVEUgYW5kIFJFU1RSSUNULgogICAgICAgIDpwYXJhbSBkZWZlcnJhYmxlOiBvcHRpb25hbCBib29sLiBJZiBzZXQsIGVtaXQgREVGRVJSQUJMRSBvciBOT1QKICAgICAgICAgREVGRVJSQUJMRSB3aGVuIGlzc3VpbmcgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuCiAgICAgICAgOnBhcmFtIHNvdXJjZV9zY2hlbWE6IE9wdGlvbmFsIHNjaGVtYSBuYW1lIG9mIHRoZSBzb3VyY2UgdGFibGUuCiAgICAgICAgOnBhcmFtIHJlZmVyZW50X3NjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIHRhYmxlLgoKICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDAuOC4wIFRoZSBmb2xsb3dpbmcgcG9zaXRpb25hbCBhcmd1bWVudCBuYW1lcwogICAgICAgICAgIGhhdmUgYmVlbiBjaGFuZ2VkOgoKICAgICAgICAgICAqIG5hbWUgLT4gY29uc3RyYWludF9uYW1lCiAgICAgICAgICAgKiBzb3VyY2UgLT4gc291cmNlX3RhYmxlCiAgICAgICAgICAgKiByZWZlcmVudCAtPiByZWZlcmVudF90YWJsZQoKICAgICAgICApB3JWAAAAclcAAABySgAAAHJZAAAAcloAAABySwAAANoFbWF0Y2gpAXI7AAAAKRByIQAAAHI8AAAAciwAAAByUwAAAHJUAAAAclAAAAByVQAAAHJWAAAAclcAAABySgAAAHJLAAAAclsAAAByWQAAAHJaAAAA2gpkaWFsZWN0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TCBleHByZXNzaW9uLCBzbyBhZC1ob2MKICAgICAgICB0YWJsZSBtZXRhZGF0YSBpcyB1c3VhbGx5IG5lZWRlZC4gICBUaGUgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IHRoZSBnaXZlbgogICAgICAgIGFyZ3VtZW50cyBpbnRvIGEgOmNsYXNzOmBzcWxhbGNoZW15LnNjaGVtYS5DaGVja0NvbnN0cmFpbnRgIGJvdW5kCiAgICAgICAgdG8gYW4gYW5vbnltb3VzIHRhYmxlIGluIG9yZGVyIHRvIGVtaXQgdGhlIENSRUFURSBzdGF0ZW1lbnQuCgogICAgICAgIDpwYXJhbSBuYW1lOiBOYW1lIG9mIHRoZSBjaGVjayBjb25zdHJhaW50LiAgVGhlIG5hbWUgaXMgbmVjZXNzYXJ5CiAgICAgICAgIHNvIHRoYXQgYW4gQUxURVIgc3RhdGVtZW50IGNhbiBiZSBlbWl0dGVkLiAgRm9yIHNldHVwcyB0aGF0CiAgICAgICAgIHVzZSBhbiBhdXRvbWF0ZWQgbmFtaW5nIHNjaGVtZSBzdWNoIGFzIHRoYXQgZGVzY3JpYmVkIGF0CiAgICAgICAgIDpyZWY6YHNxbGE6Y29uc3RyYWludF9uYW1pbmdfY29udmVudGlvbnNgLAogICAgICAgICBgYG5hbWVgYCBoZXJlIGNhbiBiZSBgYE5vbmVgYCwgYXMgdGhlIGV2ZW50IGxpc3RlbmVyIHdpbGwKICAgICAgICAgYXBwbHkgdGhlIG5hbWUgdG8gdGhlIGNvbnN0cmFpbnQgb2JqZWN0IHdoZW4gaXQgaXMgYXNzb2NpYXRlZAogICAgICAgICB3aXRoIHRoZSB0YWJsZS4KICAgICAgICA6cGFyYW0gdGFibGVfbmFtZTogU3RyaW5nIG5hbWUgb2YgdGhlIHNvdXJjZSB0YWJsZS4KICAgICAgICA6cGFyYW0gY29uZGl0aW9uOiBTUUwgZXhwcmVzc2lvbiB0aGF0J3MgdGhlIGNvbmRpdGlvbiBvZiB0aGUKICAgICAgICAgY29uc3RyYWludC4gQ2FuIGJlIGEgc3RyaW5nIG9yIFNRTEFsY2hlbXkgZXhwcmVzc2lvbiBsYW5ndWFnZQogICAgICAgICBzdHJ1Y3R1cmUuCiAgICAgICAgOnBhcmFtIGRlZmVycmFibGU6IG9wdGlvbmFsIGJvb2wuIElmIHNldCwgZW1pdCBERUZFUlJBQkxFIG9yCiAgICAgICAgIE5PVCBERUZFUlJBQkxFIHdoZW4gaXNzdWluZyBEREwgZm9yIHRoaXMgY29uc3RyYWludC4KICAgICAgICA6cGFyYW0gaW5pdGlhbGx5OiBvcHRpb25hbCBzdHJpbmcuIElmIHNldCwgZW1pdCBJTklUSUFMTFkgPHZhbHVlPgogICAgICAgICB3aGVuIGlzc3VpbmcgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuCiAgICAgICAgOnBhcmFtIHNjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgdG8gb3BlcmF0ZSB3aXRoaW4uICBUbyBjb250cm9sCiAgICAgICAgIHF1b3Rpbmcgb2YgdGhlIHNjaGVtYSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB1c2UKICAgICAgICAgdGhlIFNRTEFsY2hlbXkgY29uc3RydWN0CiAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYC4KCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuNy4wICdzY2hlbWEnIGNhbiBub3cgYWNjZXB0IGEKICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zcWwuZWxlbWVudHMucXVvdGVkX25hbWVgIGNvbnN0cnVjdC4KCiAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAwLjguMCBUaGUgZm9sbG93aW5nIHBvc2l0aW9uYWwgYXJndW1lbnQgbmFtZXMKICAgICAgICAgICBoYXZlIGJlZW4gY2hhbmdlZDoKCiAgICAgICAgICAgKiBuYW1lIC0+IGNvbnN0cmFpbnRfbmFtZQogICAgICAgICAgICogc291cmNlIC0+IHRhYmxlX25hbWUKCiAgICAgICAgci4AAAApAXI7AAAAKQhyIQAAAHI8AAAAciwAAAByLQAAAHJfAAAAci4AAAByQwAAAHI9AAAAcgsAAAByCwAAAHINAAAAcl0AAACOAgAAcwQAAAAAOhgBei9DcmVhdGVDaGVja0NvbnN0cmFp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anVuY3Rpb24gd2l0aAogICAgICAgICAgIDptZXRoOmAuT3BlcmF0aW9ucy5jcmVhdGVfaW5kZXhgIGluCiAgICAgICAgICAgb3JkZXIgdG8gcHJvZHVjZSBmdW5jdGlvbmFsIGV4cHJlc3Npb25zIHdpdGhpbiBDUkVBVEUgSU5ERVguCgogICAgICAgIDpwYXJhbSBpbmRleF9uYW1lOiBuYW1lIG9mIHRoZSBpbmRleC4KICAgICAgICA6cGFyYW0gdGFibGVfbmFtZTogbmFtZSBvZiB0aGUgb3duaW5nIHRhYmxlLgogICAgICAgIDpwYXJhbSBjb2x1bW5zOiBhIGxpc3QgY29uc2lzdGluZyBvZiBzdHJpbmcgY29sdW1uIG5hbWVzIGFuZC9vcgogICAgICAgICA6ZnVuYzpgfnNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24udGV4dGAgY29uc3RydWN0cy4KICAgICAgICA6cGFyYW0gc2NoZW1hOiBPcHRpb25hbCBzY2hlbWEgbmFtZSB0byBvcGVyYXRlIHdpdGhpbi4gIFRvIGNvbnRyb2wKICAgICAgICAgcXVvdGluZyBvZiB0aGUgc2NoZW1hIG91dHNpZGUgb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHVzZQogICAgICAgICB0aGUgU1FMQWxjaGVteSBjb25zdHJ1Y3QKICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zcWwuZWxlbWVudHMucXVvdGVkX25hbWVgLgoKICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMC43LjAgJ3NjaGVtYScgY2FuIG5vdyBhY2NlcHQgYQogICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNxbC5lbGVtZW50cy5xdW90ZWRfbmFtZWAgY29uc3RydWN0LgoKICAgICAgICA6cGFyYW0gdW5pcXVlOiBJZiBUcnVlLCBjcmVhdGUgYSB1bmlxdWUgaW5kZXguCgogICAgICAgIDpwYXJhbSBxdW90ZToKICAgICAgICAgICAgRm9yY2UgcXVvdGluZyBvZiB0aGlzIGNvbHVtbidzIG5hbWUgb24gb3Igb2ZmLCBjb3JyZXNwb25kaW5nCiAgICAgICAgICAgIHRvIGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYC4gV2hlbiBsZWZ0IGF0IGl0cyBkZWZhdWx0CiAgICAgICAgICAgIG9mIGBgTm9uZWBgLCB0aGUgY29sdW1uIGlkZW50aWZpZXIgd2lsbCBiZSBxdW90ZWQgYWNjb3JkaW5nIHRvCiAgICAgICAgICAgIHdoZXRoZXIgdGhlIG5hbWUgaXMgY2FzZSBzZW5zaXRpdmUgKGlkZW50aWZpZXJzIHdpdGggYXQgbGVhc3Qgb25lCiAgICAgICAgICAgIHVwcGVyIGNhc2UgY2hhcmFjdGVyIGFyZSB0cmVhdGVkIGFzIGNhc2Ugc2Vuc2l0aXZlKSwgb3IgaWYgaXQncyBhCiAgICAgICAgICAgIHJlc2VydmVkIHdvcmQuIFRoaXMgZmxhZyBpcyBvbmx5IG5lZWRlZCB0byBmb3JjZSBxdW90aW5nIG9mIGEKICAgICAgICAgICAgcmVzZXJ2ZWQgd29yZCB3aGljaCBpcyBub3Qga25vd24gYnkgdGhlIFNRTEFsY2hlbXkgZGlhbGVjdC4KCiAgICAgICAgOnBhcmFtIFwqKmt3OiBBZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIG5vdCBtZW50aW9uZWQgYWJvdmUgYXJlCiAgICAgICAgICAgIGRpYWxlY3Qgc3BlY2lmaWMsIGFuZCBwYXNzZWQgaW4gdGhlIGZvcm0KICAgICAgICAgICAgYGA8ZGlhbGVjdG5hbWU+XzxhcmduYW1lPmBgLgogICAgICAgICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIGFuIGluZGl2aWR1YWwgZGlhbGVjdCBhdAogICAgICAgICAgICA6cmVmOmBkaWFsZWN0X3RvcGxldmVsYCBmb3IgZGV0YWlsIG9uIGRvY3VtZW50ZWQgYXJndW1lbnRzLgoKICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDAuOC4wIFRoZSBmb2xsb3dpbmcgcG9zaXRpb25hbCBhcmd1bWVudCBuYW1lcwogICAgICAgICAgIGhhdmUgYmVlbiBjaGFuZ2VkOgoKICAgICAgICAgICAqIG5hbWUgLT4gaW5kZXhfbmFtZQoKICAgICAgICApAnIuAAAAcjQAAAApAXI7AAAAKQly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aW5kZXgiIGluc3RydWN0aW9uIHVzaW5nIHRoZSBjdXJyZW50CiAgICAgICAgbWlncmF0aW9uIGNvbnRleHQuCgogICAgICAgIGUuZy46OgoKICAgICAgICAgICAgZHJvcF9pbmRleCgiYWNjb3VudHMiKQoKICAgICAgICA6cGFyYW0gaW5kZXhfbmFtZTogbmFtZSBvZiB0aGUgaW5kZXguCiAgICAgICAgOnBhcmFtIHRhYmxlX25hbWU6IG5hbWUgb2YgdGhlIG93bmluZyB0YWJsZS4gIFNvbWUKICAgICAgICAgYmFja2VuZHMgc3VjaCBhcyBNaWNyb3NvZnQgU1FMIFNlcnZlciByZXF1aXJlIHRoaXMuCiAgICAgICAgOnBhcmFtIHNjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgdG8gb3BlcmF0ZSB3aXRoaW4uICBUbyBjb250cm9sCiAgICAgICAgIHF1b3Rpbmcgb2YgdGhlIHNjaGVtYSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB1c2UKICAgICAgICAgdGhlIFNRTEFsY2hlbXkgY29uc3RydWN0CiAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYC4KCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuNy4wICdzY2hlbWEnIGNhbiBub3cgYWNjZXB0IGEKICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zcWwuZWxlbWVudHMucXVvdGVkX25hbWVgIGNvbnN0cnVjdC4KCiAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAwLjguMCBUaGUgZm9sbG93aW5nIHBvc2l0aW9uYWwgYXJndW1lbnQgbmFtZXMKICAgICAgICAgICBoYXZlIGJlZW4gY2hhbmdlZDoKCiAgICAgICAgICAgKiBuYW1lIC0+IGluZGV4X25hbWUKCiAgICAgICAgKQJyLQAAAHIuAAAAKQFyOwAAACkGciEAAAByPAAAAHJkAAAAci0AAAByLgAAAHI9AAAAcgsAAAByCwAAAHINAAAAcmwAAACPAwAAcwQAAAAAHg4BehZEcm9wSW5kZXhPcC5kcm9wX2luZGV4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dHJ1Y3Rpb24gdXNpbmcgdGhlIGN1cnJlbnQgbWlncmF0aW9uCiAgICAgICAgY29udGV4dC4KCiAgICAgICAgVGhpcyBkaXJlY3RpdmUgcmVjZWl2ZXMgYW4gYXJndW1lbnQgbGlzdCBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlCiAgICAgICAgdHJhZGl0aW9uYWwgOmNsYXNzOmBzcWxhbGNoZW15LnNjaGVtYS5UYWJsZWAgY29uc3RydWN0LCBidXQgd2l0aG91dCB0aGUKICAgICAgICBtZXRhZGF0YTo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IElOVEVHRVIsIFZBUkNIQVIsIE5WQVJDSEFSLCBDb2x1bW4KICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAoKICAgICAgICAgICAgb3AuY3JlYXRlX3RhYmxlKAogICAgICAgICAgICAgICAgJ2FjY291bnQnLAogICAgICAgICAgICAgICAgQ29sdW1uKCdpZCcsIElOVEVHRVIsIHByaW1hcnlfa2V5PVRydWUpLAogICAgICAgICAgICAgICAgQ29sdW1uKCduYW1lJywgVkFSQ0hBUig1MCksIG51bGxhYmxlPUZhbHNlKSwKICAgICAgICAgICAgICAgIENvbHVtbignZGVzY3JpcHRpb24nLCBOVkFSQ0hBUigyMDApKSwKICAgICAgICAgICAgICAgIENvbHVtbigndGltZXN0YW1wJywgVElNRVNUQU1QLCBzZXJ2ZXJfZGVmYXVsdD1mdW5jLm5vdygpKQogICAgICAgICAgICApCgogICAgICAgIE5vdGUgdGhhdCA6bWV0aDpgLmNyZWF0ZV90YWJsZWAgYWNjZXB0cwogICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLkNvbHVtbmAKICAgICAgICBjb25zdHJ1Y3RzIGRpcmVjdGx5IGZyb20gdGhlIFNRTEFsY2hlbXkgbGlicmFyeS4gIEluIHBhcnRpY3VsYXIsCiAgICAgICAgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgY3JlYXRlZCBvbiB0aGUgZGF0YWJhc2Ugc2lkZSBhcmUKICAgICAgICBzcGVjaWZpZWQgdXNpbmcgdGhlIGBgc2VydmVyX2RlZmF1bHRgYCBwYXJhbWV0ZXIsIGFuZCBub3QKICAgICAgICBgYGRlZmF1bHRgYCB3aGljaCBvbmx5IHNwZWNpZmllcyBQeXRob24tc2lkZSBkZWZhdWx0czo6CgogICAgICAgICAgICBmcm9tIGFsZW1iaWMgaW1wb3J0IG9wCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgQ29sdW1uLCBUSU1FU1RBTVAsIGZ1bmMKCiAgICAgICAgICAgICMgc3BlY2lmeSAiREVGQVVMVCBOT1ciIGFsb25nIHdpdGggdGhlICJ0aW1lc3RhbXAiIGNvbHVtbgogICAgICAgICAgICBvcC5jcmVhdGVfdGFibGUoJ2FjY291bnQnLAogICAgICAgICAgICAgICAgQ29sdW1uKCdpZCcsIElOVEVHRVIsIHByaW1hcnlfa2V5PVRydWUpLAogICAgICAgICAgICAgICAgQ29sdW1uKCd0aW1lc3RhbXAnLCBUSU1FU1RBTVAsIHNlcnZlcl9kZWZhdWx0PWZ1bmMubm93KCkpCiAgICAgICAgICAgICkKCiAgICAgICAgVGhlIGZ1bmN0aW9uIGFsc28gcmV0dXJucyBhIG5ld2x5IGNyZWF0ZWQKICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5UYWJsZWAgb2JqZWN0LCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YWJsZQogICAgICAgIHNwZWNpZmljYXRpb24gZ2l2ZW4sIHdoaWNoIGlzIHN1aXRhYmxlIGZvcgogICAgICAgIGltbWVkaWF0ZSBTUUwgb3BlcmF0aW9ucywgaW4gcGFydGljdWxhcgogICAgICAgIDptZXRoOmAuT3BlcmF0aW9ucy5idWxrX2luc2VydGA6OgoKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBJTlRFR0VSLCBWQVJDSEFSLCBOVkFSQ0hBUiwgQ29sdW1uCiAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKCiAgICAgICAgICAgIGFjY291bnRfdGFibGUgPSBvcC5jcmVhdGVfdGFibGUoCiAgICAgICAgICAgICAgICAnYWNjb3VudCcsCiAgICAgICAgICAgICAgICBDb2x1bW4oJ2lkJywgSU5URUdFUiwgcHJpbWFyeV9rZXk9VHJ1ZSksCiAgICAgICAgICAgICAgICBDb2x1bW4oJ25hbWUnLCBWQVJDSEFSKDUwKSwgbnVsbGFibGU9RmFsc2UpLAogICAgICAgICAgICAgICAgQ29sdW1uKCdkZXNjcmlwdGlvbicsIE5WQVJDSEFSKDIwMCkpLAogICAgICAgICAgICAgICAgQ29sdW1uKCd0aW1lc3RhbXAnLCBUSU1FU1RBTVAsIHNlcnZlcl9kZWZhdWx0PWZ1bmMubm93KCkpCiAgICAgICAgICAgICkKCiAgICAgICAgICAgIG9wLmJ1bGtfaW5zZXJ0KAogICAgICAgICAgICAgICAgYWNjb3VudF90YWJsZSwKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAiQTEiLCAiZGVzY3JpcHRpb24iOiAiYWNjb3VudCAxIn0sCiAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogIkEyIiwgImRlc2NyaXB0aW9uIjogImFjY291bnQgMiJ9LAogICAgICAgICAgICAgICAgXQogICAgICAgICAgICApCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuNy4wCgogICAgICAgIDpwYXJhbSB0YWJsZV9uYW1lOiBOYW1lIG9mIHRoZSB0YWJsZQogICAgICAgIDpwYXJhbSBcKmNvbHVtbnM6IGNvbGxlY3Rpb24gb2YgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQ29sdW1uYAogICAgICAgICBvYmplY3RzIHdpdGhpbgogICAgICAgICB0aGUgdGFibGUsIGFzIHdlbGwgYXMgb3B0aW9uYWwgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQ29uc3RyYWludGAKICAgICAgICAgb2JqZWN0cwogICAgICAgICBhbmQgOmNsYXNzOmB+LnNxbGFsY2hlbXkuc2NoZW1hLkluZGV4YCBvYmplY3RzLgogICAgICAgIDpwYXJhbSBzY2hlbWE6IE9wdGlvbmFsIHNjaGVtYSBuYW1lIHRvIG9wZXJhdGUgd2l0aGluLiAgVG8gY29udHJvbAogICAgICAgICBxdW90aW5nIG9mIHRoZSBzY2hlbWEgb3V0c2lkZSBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgdXNlCiAgICAgICAgIHRoZSBTUUxBbGNoZW15IGNvbnN0cnVjdAogICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNxbC5lbGVtZW50cy5xdW90ZWRfbmFtZWAuCgogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAwLjcuMCAnc2NoZW1hJyBjYW4gbm93IGFjY2VwdCBhCiAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYCBjb25zdHJ1Y3QuCiAgICAgICAgOnBhcmFtIFwqKmt3OiBPdGhlciBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nCiAgICAgICAgIDpjbGFzczpgc3FsYWxjaGVteS5zY2hlbWEuVGFibGVgIG9iamVjdCBjcmVhdGVkIGZvciB0aGUgY29tbWFuZC4KCiAgICAgICAgOnJldHVybjogdGhlIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBvYmplY3QgY29ycmVzcG9uZGluZwogICAgICAgICB0byB0aGUgcGFyYW1ldGVycyBnaXZlbi4KCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuNy4wIC0gdGhlIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYAogICAgICAgICAgICBvYmplY3QgaXMgcmV0dXJuZWQuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMC44LjAgVGhlIGZvbGxvd2luZyBwb3NpdGlvbmFsIGFyZ3VtZW50IG5hbWVzCiAgICAgICAgICAgaGF2ZSBiZWVuIGNoYW5nZWQ6CgogICAgICAgICAgICogbmFtZSAtPiB0YWJsZV9uYW1lCgogICAgICAgICkBcjsAAAApBnIhAAAAcjwAAAByLQAAAHJCAAAAckMAAAByPQAAAHILAAAAcgsAAAByDQAAAHJvAAAA7QMAAHMEAAAAAFwOAXoaQ3JlYXRlVGFibGVPcC5jcmVh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IGF0IG9uY2UgYW5kIHRoZSBiYWNrZW5kIHNob3VsZAogICAgICAgICJkbyB0aGUgcmlnaHQgdGhpbmciLCBlbWl0dGluZyBlYWNoIGNoYW5nZSBlaXRoZXIKICAgICAgICBzZXBhcmF0ZWx5IG9yIHRvZ2V0aGVyIGFzIHRoZSBiYWNrZW5kIGFsbG93cy4KCiAgICAgICAgTXlTUUwgaGFzIHNwZWNpYWwgcmVxdWlyZW1lbnRzIGhlcmUsIHNpbmNlIE15U1FMCiAgICAgICAgY2Fubm90IEFMVEVSIGEgY29sdW1uIHdpdGhvdXQgYSBmdWxsIHNwZWNpZmljYXRpb24uCiAgICAgICAgV2hlbiBwcm9kdWNpbmcgTXlTUUwtY29tcGF0aWJsZSBtaWdyYXRpb24gZmlsZXMsCiAgICAgICAgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgYGBleGlzdGluZ190eXBlYGAsCiAgICAgICAgYGBleGlzdGluZ19zZXJ2ZXJfZGVmYXVsdGBgLCBhbmQgYGBleGlzdGluZ19udWxsYWJsZWBgCiAgICAgICAgcGFyYW1ldGVycyBiZSBwcmVzZW50LCBpZiBub3QgYmVpbmcgYWx0ZXJlZC4KCiAgICAgICAgVHlwZSBjaGFuZ2VzIHdoaWNoIGFyZSBhZ2FpbnN0IHRoZSBTUUxBbGNoZW15CiAgICAgICAgInNjaGVtYSIgdHlwZXMgOmNsYXNzOmB+c3FsYWxjaGVteS50eXBlcy5Cb29sZWFuYAogICAgICAgIGFuZCAgOmNsYXNzOmB+c3FsYWxjaGVteS50eXBlcy5FbnVtYCBtYXkgYWxzbwogICAgICAgIGFkZCBvciBkcm9wIGNvbnN0cmFpbnRzIHdoaWNoIGFjY29tcGFueSB0aG9zZQogICAgICAgIHR5cGVzIG9uIGJhY2tlbmRzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtIG5hdGl2ZWx5LgogICAgICAgIFRoZSBgYGV4aXN0aW5nX3NlcnZlcl9kZWZhdWx0YGAgYXJndW1lbnQgaXMKICAgICAgICB1c2VkIGluIHRoaXMgY2FzZSBhcyB3ZWxsIHRvIHJlbW92ZSBhIHByZXZpb3VzCiAgICAgICAgY29uc3RyYWludC4KCiAgICAgICAgOnBhcmFtIHRhYmxlX25hbWU6IHN0cmluZyBuYW1lIG9mIHRoZSB0YXJnZXQgdGFibGUuCiAgICAgICAgOnBhcmFtIGNvbHVtbl9uYW1lOiBzdHJpbmcgbmFtZSBvZiB0aGUgdGFyZ2V0IGNvbHVtbiwKICAgICAgICAgYXMgaXQgZXhpc3RzIGJlZm9yZSB0aGUgb3BlcmF0aW9uIGJlZ2lucy4KICAgICAgICA6cGFyYW0gbnVsbGFibGU6IE9wdGlvbmFsOyBzcGVjaWZ5IGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYAogICAgICAgICB0byBhbHRlciB0aGUgY29sdW1uJ3MgbnVsbGFiaWxpdHkuCiAgICAgICAgOnBhcmFtIHNlcnZlcl9kZWZhdWx0OiBPcHRpb25hbDsgc3BlY2lmeSBhIHN0cmluZwogICAgICAgICBTUUwgZXhwcmVzc2lvbiwgOmZ1bmM6YH5zcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLnRleHRgLAogICAgICAgICBvciA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5EZWZhdWx0Q2xhdXNlYCB0byBpbmRpY2F0ZQogICAgICAgICBhbiBhbHRlcmF0aW9uIHRvIHRoZSBjb2x1bW4ncyBkZWZhdWx0IHZhbHVlLgogICAgICAgICBTZXQgdG8gYGBOb25lYGAgdG8gaGF2ZSB0aGUgZGVmYXVsdCByZW1vdmVkLgogICAgICAgIDpwYXJhbSBuZXdfY29sdW1uX25hbWU6IE9wdGlvbmFsOyBzcGVjaWZ5IGEgc3RyaW5nIG5hbWUgaGVyZSB0bwogICAgICAgICBpbmRpY2F0ZSB0aGUgbmV3IG5hbWUgd2l0aGluIGEgY29sdW1uIHJlbmFtZSBvcGVyYXRpb24uCiAgICAgICAgOnBhcmFtIGBgdHlwZV9gYDogT3B0aW9uYWw7IGEgOmNsYXNzOmB+c3FsYWxjaGVteS50eXBlcy5UeXBlRW5naW5lYAogICAgICAgICB0eXBlIG9iamVjdCB0byBzcGVjaWZ5IGEgY2hhbmdlIHRvIHRoZSBjb2x1bW4ncyB0eXBlLgogICAgICAgICBGb3IgU1FMQWxjaGVteSB0eXBlcyB0aGF0IGFsc28gaW5kaWNhdGUgYSBjb25zdHJhaW50IChpLmUuCiAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuQm9vbGVhbmAsIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuRW51bWApLAogICAgICAgICB0aGUgY29uc3RyYWludCBpcyBhbHNvIGdlbmVyYXRlZC4KICAgICAgICA6cGFyYW0gYXV0b2luY3JlbWVudDogc2V0IHRoZSBgYEFVVE9fSU5DUkVNRU5UYGAgZmxhZyBvZiB0aGUgY29sdW1uOwogICAgICAgICBjdXJyZW50bHkgdW5kZXJzdG9vZCBieSB0aGUgTXlTUUwgZGlhbGVjdC4KICAgICAgICA6cGFyYW0gZXhpc3RpbmdfdHlwZTogT3B0aW9uYWw7IGEKICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS50eXBlcy5UeXBlRW5naW5lYAogICAgICAgICB0eXBlIG9iamVjdCB0byBzcGVjaWZ5IHRoZSBwcmV2aW91cyB0eXBlLiAgIFRoaXMKICAgICAgICAgaXMgcmVxdWlyZWQgZm9yIGFsbCBNeVNRTCBjb2x1bW4gYWx0ZXIgb3BlcmF0aW9ucyB0aGF0CiAgICAgICAgIGRvbid0IG90aGVyd2lzZSBzcGVjaWZ5IGEgbmV3IHR5cGUsIGFzIHdlbGwgYXMgZm9yCiAgICAgICAgIHdoZW4gbnVsbGFiaWxpdHkgaXMgYmVpbmcgY2hhbmdlZCBvbiBhIFNRTCBTZXJ2ZXIKICAgICAgICAgY29sdW1uLiAgSXQgaXMgYWxzbyB1c2VkIGlmIHRoZSB0eXBlIGlzIGEgc28tY2FsbGVkCiAgICAgICAgIFNRTGxjaGVteSAic2NoZW1hIiB0eXBlIHdoaWNoIG1heSBkZWZpbmUgYSBjb25zdHJhaW50IChpLmUuCiAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuQm9vbGVhbmAsCiAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuRW51bWApLAogICAgICAgICBzbyB0aGF0IHRoZSBjb25zdHJhaW50IGNhbiBiZSBkcm9wcGVkLgogICAgICAgIDpwYXJhbSBleGlzdGluZ19zZXJ2ZXJfZGVmYXVsdDogT3B0aW9uYWw7IFRoZSBleGlzdGluZwogICAgICAgICBkZWZhdWx0IHZhbHVlIG9mIHRoZSBjb2x1bW4uICAgUmVxdWlyZWQgb24gTXlTUUwgaWYKICAgICAgICAgYW4gZXhpc3RpbmcgZGVmYXVsdCBpcyBub3QgYmVpbmcgY2hhbmdlZDsgZWxzZSBNeVNRTAogICAgICAgICByZW1vdmVzIHRoZSBkZWZhdWx0LgogICAgICAgIDpwYXJhbSBleGlzdGluZ19udWxsYWJsZTogT3B0aW9uYWw7IHRoZSBleGlzdGluZyBudWxsYWJpbGl0eQogICAgICAgICBvZiB0aGUgY29sdW1uLiAgUmVxdWlyZWQgb24gTXlTUUwgaWYgdGhlIGV4aXN0aW5nIG51bGxhYmlsaXR5CiAgICAgICAgIGlzIG5vdCBiZWluZyBjaGFuZ2VkOyBlbHNlIE15U1FMIHNldHMgdGhpcyB0byBOVUxMLgogICAgICAgIDpwYXJhbSBleGlzdGluZ19hdXRvaW5jcmVtZW50OiBPcHRpb25hbDsgdGhlIGV4aXN0aW5nIGF1dG9pbmNyZW1lbnQKICAgICAgICAgb2YgdGhlIGNvbHVtbi4gIFVzZWQgZm9yIE15U1FMJ3Mgc3lzdGVtIG9mIGFsdGVyaW5nIGEgY29sdW1uCiAgICAgICAgIHRoYXQgc3BlY2lmaWVzIGBgQVVUT19JTkNSRU1FTlRgYC4KICAgICAgICA6cGFyYW0gc2NoZW1hOiBPcHRpb25hbCBzY2hlbWEgbmFtZSB0byBvcGVyYXRlIHdpdGhpbi4gIFRvIGNvbnRyb2wKICAgICAgICAgcXVvdGluZyBvZiB0aGUgc2NoZW1hIG91dHNpZGUgb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHVzZQogICAgICAgICB0aGUgU1FMQWxjaGVteSBjb25zdHJ1Y3QKICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zcWwuZWxlbWVudHMucXVvdGVkX25hbWVgLgoKICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMC43LjAgJ3NjaGVtYScgY2FuIG5vdyBhY2NlcHQgYQogICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15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bSBhbGVtYmljIGltcG9ydCBvcAogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IENvbHVtbiwgSU5URUdFUiwgRm9yZWlnbktleQoKICAgICAgICAgICAgb3AuYWRkX2NvbHVtbignb3JnYW5pemF0aW9uJywKICAgICAgICAgICAgICAgIENvbHVtbignYWNjb3VudF9pZCcsIElOVEVHRVIsIEZvcmVpZ25LZXkoJ2FjY291bnRzLmlkJykpCiAgICAgICAgICAgICkKCiAgICAgICAgTm90ZSB0aGF0IHRoaXMgc3RhdGVtZW50IHVzZXMgdGhlIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLkNvbHVtbmAKICAgICAgICBjb25zdHJ1Y3QgYXMgaXMgZnJvbSB0aGUgU1FMQWxjaGVteSBsaWJyYXJ5LiAgSW4gcGFydGljdWxhciwKICAgICAgICBkZWZhdWx0IHZhbHVlcyB0byBiZSBjcmVhdGVkIG9uIHRoZSBkYXRhYmFzZSBzaWRlIGFyZQogICAgICAgIHNwZWNpZmllZCB1c2luZyB0aGUgYGBzZXJ2ZXJfZGVmYXVsdGBgIHBhcmFtZXRlciwgYW5kIG5vdAogICAgICAgIGBgZGVmYXVsdGBgIHdoaWNoIG9ubHkgc3BlY2lmaWVzIFB5dGhvbi1zaWRlIGRlZmF1bHRzOjoKCiAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBDb2x1bW4sIFRJTUVTVEFNUCwgZnVuYwoKICAgICAgICAgICAgIyBzcGVjaWZ5ICJERUZBVUxUIE5PVyIgYWxvbmcgd2l0aCB0aGUgY29sdW1uIGFkZAogICAgICAgICAgICBvcC5hZGRfY29sdW1uKCdhY2NvdW50JywKICAgICAgICAgICAgICAgIENvbHVtbigndGltZXN0YW1wJywgVElNRVNUQU1QLCBzZXJ2ZXJfZGVmYXVsdD1mdW5jLm5vdygpKQogICAgICAgICAgICApCgogICAgICAgIDpwYXJhbSB0YWJsZV9uYW1lOiBTdHJpbmcgbmFtZSBvZiB0aGUgcGFyZW50IHRhYmxlLgogICAg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dW90ZWRfbmFtZWAuCgogICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAwLjcuMCAnc2NoZW1hJyBjYW4gbm93IGFjY2VwdCBhCiAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYCBjb25zdHJ1Y3QuCgogICAgICAgIDpwYXJhbSBtc3NxbF9kcm9wX2NoZWNrOiBPcHRpb25hbCBib29sZWFuLiAgV2hlbiBgYFRydWVgYCwgb24KICAgICAgICAgTWljcm9zb2Z0IFNRTCBTZXJ2ZXIgb25seSwgZmlyc3QKICAgICAgICAgZHJvcCB0aGUgQ0hFQ0sgY29uc3RyYWludCBvbiB0aGUgY29sdW1uIHVzaW5nIGEKICAgICAgICAgU1FMLXNjcmlwdC1jb21wYXRpYmxlCiAgICAgICAgIGJsb2NrIHRoYXQgc2VsZWN0cyBpbnRvIGEgQHZhcmlhYmxlIGZyb20gc3lzLmNoZWNrX2NvbnN0cmFpbnRzLAogICAgICAgICB0aGVuIGV4ZWMncyBhIHNlcGFyYXRlIERST1AgQ09OU1RSQUlOVCBmb3IgdGhhdCBjb25zdHJhaW50LgogICAgICAgIDpwYXJhbSBtc3NxbF9kcm9wX2RlZmF1bHQ6IE9wdGlvbmFsIGJvb2xlYW4uICBXaGVuIGBgVHJ1ZWBgLCBvbgogICAgICAgICBNaWNyb3NvZnQgU1FMIFNlcnZlciBvbmx5LCBmaXJzdAogICAgICAgICBkcm9wIHRoZSBERUZBVUxUIGNvbnN0cmFpbnQgb24gdGhlIGNvbHVtbiB1c2luZyBhCiAgICAgICAgIFNRTC1zY3JpcHQtY29tcGF0aWJsZQogICAgICAgICBibG9jayB0aGF0IHNlbGVjdHMgaW50byBhIEB2YXJpYWJsZSBmcm9tIHN5cy5kZWZhdWx0X2NvbnN0cmFpbnRzLAogICAgICAgICB0aGVuIGV4ZWMncyBhIHNlcGFyYXRlIERST1AgQ09OU1RSQUlOVCBmb3IgdGhhdCBkZWZhdWx0LgogICAgICAgIDpwYXJhbSBtc3NxbF9kcm9wX2ZvcmVpZ25fa2V5OiBPcHRpb25hbCBib29sZWFuLiAgV2hlbiBgYFRydWVg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Ljo6CgogICAgICAgICAgICBmcm9tIGFsZW1iaWMgaW1wb3J0IG9wCiAgICAgICAgICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGUKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15LnNxbCBpbXBvcnQgdGFibGUsIGNvbHVtbgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IFN0cmluZywgSW50ZWdlciwgRGF0ZQoKICAgICAgICAgICAgIyBDcmVhdGUgYW4gYWQtaG9jIHRhYmxlIHRvIHVzZSBmb3IgdGhlIGluc2VydCBzdGF0ZW1lbnQuCiAgICAgICAgICAgIGFjY291bnRzX3RhYmxlID0gdGFibGUoJ2FjY291bnQnLAogICAgICAgICAgICAgICAgY29sdW1uKCdpZCcsIEludGVnZXIpLAogICAgICAgICAgICAgICAgY29sdW1uKCduYW1lJywgU3RyaW5nKSwKICAgICAgICAgICAgICAgIGNvbHVtbignY3JlYXRlX2RhdGUnLCBEYXRlKQogICAgICAgICAgICApCgogICAgICAgICAgICBvcC5idWxrX2luc2VydChhY2NvdW50c190YWJsZSwKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICB7J2lkJzoxLCAnbmFtZSc6J0pvaG4gU21pdGgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZV9kYXRlJzpkYXRlKDIwMTAsIDEwLCA1KX0sCiAgICAgICAgICAgICAgICAgICAgeydpZCc6MiwgJ25hbWUnOidFZCBXaWxsaWFtcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRlX2RhdGUnOmRhdGUoMjAwNywgNSwgMjcpfSwKICAgICAgICAgICAgICAgICAgICB7J2lkJzozLCAnbmFtZSc6J1dlbmR5IEpvbmVzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGVfZGF0ZSc6ZGF0ZSgyMDA4LCA4LCAxNSl9LAogICAgICAgICAgICAgICAgXQogICAgICAgICAgICApCgogICAgICAgIFdoZW4gdXNpbmcgLS1zcWwgbW9kZSwgc29tZSBkYXRhdHlwZXMgbWF5IG5vdCByZW5kZXIgaW5saW5lCiAgICAgICAgYXV0b21hdGljYWxseSwgc3VjaCBhcyBkYXRlcyBhbmQgb3RoZXIgc3BlY2lhbCB0eXBlcy4gICBXaGVuIHRoaXMKICAgICAgICBpc3N1ZSBpcyBwcmVzZW50LCA6bWV0aDpgLk9wZXJhdGlvbnMuaW5saW5lX2xpdGVyYWxgIG1heSBiZSB1c2VkOjoKCiAgICAgICAgICAgIG9wLmJ1bGtfaW5zZXJ0KGFjY291bnRzX3RhYmxlLAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIHsnaWQnOjEsICduYW1lJzonSm9obiBTbWl0aCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRlX2RhdGUnOm9wLmlubGluZV9saXRlcmFsKCIyMDEwLTEwLTA1Iil9LAogICAgICAgICAgICAgICAgICAgIHsnaWQnOjIsICduYW1lJzonRWQgV2lsbGlhbXMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZV9kYXRlJzpvcC5pbmxpbmVfbGl0ZXJhbCgiMjAwNy0wNS0yNyIpfSwKICAgICAgICAgICAgICAgICAgICB7J2lkJzozLCAnbmFtZSc6J1dlbmR5IEpvbmVzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGVfZGF0ZSc6b3AuaW5saW5lX2xpdGVyYWwoIjIwMDgtMDgtMTUiKX0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgbXVsdGlpbnNlcnQ9RmFsc2UKICAgICAgICAgICAgKQoKICAgICAgICBXaGVuIHVzaW5nIDptZXRoOmAuT3BlcmF0aW9ucy5pbmxpbmVfbGl0ZXJhbGAgaW4gY29uanVuY3Rpb24gd2l0aAogICAgICAgIDptZXRoOmAuT3BlcmF0aW9ucy5idWxrX2luc2VydGAsIGluIG9yZGVyIGZvciB0aGUgc3RhdGVtZW50IHRvIHdvcmsKICAgICAgICBpbiAib25saW5lIiAoZS5nLiBub24gLS1zcWwpIG1vZGUsIHRoZQogICAgICAgIDpwYXJhbXJlZjpgfi5PcGVyYXRpb25zLmJ1bGtfaW5zZXJ0Lm11bHRpaW5zZXJ0YAogICAgICAgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgYEZhbHNlYGAsIHdoaWNoIHdpbGwgaGF2ZSB0aGUgZWZmZWN0IG9mCiAgICAgICAgaW5kaXZpZHVhbCBJTlNFUlQgc3RhdGVtZW50cyBiZWluZyBlbWl0dGVkIHRvIHRoZSBkYXRhYmFzZSwgZWFjaAogICAgICAgIHdpdGggYSBkaXN0aW5jdCBWQUxVRVMgY2xhdXNlLCBzbyB0aGF0IHRoZSAiaW5saW5lIiB2YWx1ZXMgY2FuCiAgICAgICAgc3RpbGwgYmUgcmVuZGVyZWQsIHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gcGFzcyB0aGUgdmFsdWVzCiAgICAgICAgYXMgYm91bmQgcGFyYW1ldGVycy4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMC42LjQgOm1ldGg6YC5PcGVyYXRpb25zLmlubGluZV9saXRlcmFsYCBjYW4gbm93CiAgICAgICAgICAgYmUgdXNlZCB3aXRoIDptZXRoOmAuT3BlcmF0aW9ucy5idWxrX2luc2VydGAsIGFuZCB0aGUKICAgICAgICAgICA6cGFyYW1yZWY6YH4uT3BlcmF0aW9ucy5idWxrX2luc2VydC5tdWx0aWluc2VydGAgZmxhZyBoYXMKICAgICAgICAgICBiZWVuIGFkZGVkIHRvIGFzc2lzdCBpbiB0aGlzIHVzYWdlIHdoZW4gcnVubmluZyBpbiAib25saW5lIgogICAgICAgICAgIG1vZGUuCgogICAgICAgIDpwYXJhbSB0YWJsZTogYSB0YWJsZSBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgdGFyZ2V0IG9mIHRoZSBJTlNFUlQuCgogICAgICAgIDpwYXJhbSByb3dzOiBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzIGluZGljYXRpbmcgcm93cy4KCiAgICAgICAgOnBhcmFtIG11bHRpaW5zZXJ0OiB3aGVuIGF0IGl0cyBkZWZhdWx0IG9mIFRydWUgYW5kIC0tc3FsIG1vZGUgaXMgbm90CiAgICAgICAgICAgZW5hYmxlZCwgdGhlIElOU0VSVCBzdGF0ZW1lbnQgd2lsbCBiZSBleGVjdXRlZCB1c2luZwogICAgICAgICAgICJleGVjdXRlbWFueSgpIiBzdHlsZSwgd2hlcmUgYWxsIGVsZW1lbnRzIGluIHRoZSBsaXN0IG9mCiAgICAgICAgICAgZGljdGlvbmFyaWVzIGFyZSBwYXNzZWQgYXMgYm91bmQgcGFyYW1ldGVycyBpbiBhIHNpbmdsZQogICAgICAgICAgIGxpc3QuICAgU2V0dGluZyB0aGlzIHRvIEZhbHNlIHJlc3VsdHMgaW4gaW5kaXZpZHVhbCBJTlNFUlQKICAgICAgICAgICBzdGF0ZW1lbnRzIGJlaW5nIGVtaXR0ZWQgcGVyIHBhcmFtZXRlciBzZXQsIGFuZCBpcyBuZWVkZWQKICAgICAgICAgICBpbiB0aG9zZSBjYXNlcyB3aGVyZSBub24tbGl0ZXJhbCB2YWx1ZXMgYXJlIHByZXNlbnQgaW4gdGhlCiAgICAgICAgICAgcGFyYW1ldGVyIHNldHMuCgogICAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuNi40CgogICAgICAgICAgKQFyqgAAAE4pAXI7AAAAKQZyIQAAAHI8AAAAcmkAAAByqQAAAHKqAAAAcj0AAAByCwAAAHILAAAAcg0AAABypwAAAIAGAABzBAAAAABVDgF6GEJ1bGtJbnNlcnRPcC5idWxrX2luc2VydE4pAVQpAVQpB3IPAAAAchAAAAByEQAAAHISAAAAcjEAAAByKQAAAHKnAAAAcgsAAAByCwAAAHILAAAAcg0AAAByqAAAAHcGAABzCAAAAAgCBAIKBQIBcqgAAADaB2V4ZWN1dGVjAAAAAAAAAAAAAAAABAAAAEAAAABzKAAAAGUAWgFkAFoCZAFaA2QHZANkBIQBWgRlBWQIZAVkBoQBgwFaBmQCUwApCdoMRXhlY3V0ZVNRTE9weiNSZXByZXNlbnQgYW4gZXhlY3V0ZSBTUUwgb3BlcmF0aW9uLk5jAwAAAAAAAAADAAAAAgAAAEMAAABzEAAAAHwBfABfAHwCfABfAWQAUwApAU4pAnJgAAAA2hFleGVjdXRpb25fb3B0aW9ucykDcgwAAAByYAAAAHKtAAAAcgsAAAByCwAAAHINAAAAcjEAAADdBgAAcwQAAAAAAQYBehVFeGVjdXRlU1FMT3AuX19pbml0X19jBAAAAAAAAAAFAAAABAAAAEMAAABzFgAAAHwAfAJ8A2QBjQJ9BHwBoAB8BKEBUwApAmHCCgAARXhlY3V0ZSB0aGUgZ2l2ZW4gU1FMIHVzaW5nIHRoZSBjdXJyZW50IG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICBJbiBhIFNRTCBzY3JpcHQgY29udGV4dCwgdGhlIHN0YXRlbWVudCBpcyBlbWl0dGVkIGRpcmVjdGx5IHRvIHRoZQogICAgICAgIG91dHB1dCBzdHJlYW0uICAgVGhlcmUgaXMgKm5vKiByZXR1cm4gcmVzdWx0LCBob3dldmVyLCBhcyB0aGlzCiAgICAgICAgZnVuY3Rpb24gaXMgb3JpZW50ZWQgdG93YXJkcyBnZW5lcmF0aW5nIGEgY2hhbmdlIHNjcmlwdAogICAgICAgIHRoYXQgY2FuIHJ1biBpbiAib2ZmbGluZSIgbW9kZS4gIEZvciBmdWxsIGludGVyYWN0aW9uCiAgICAgICAgd2l0aCBhIGNvbm5lY3RlZCBkYXRhYmFzZSwgdXNlIHRoZSAiYmluZCIgYXZhaWxhYmxlCiAgICAgICAgZnJvbSB0aGUgY29udGV4dDo6CgogICAgICAgICAgICBmcm9tIGFsZW1iaWMgaW1wb3J0IG9wCiAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBvcC5nZXRfYmluZCgpCgogICAgICAgIEFsc28gbm90ZSB0aGF0IGFueSBwYXJhbWV0ZXJpemVkIHN0YXRlbWVudCBoZXJlICp3aWxsIG5vdCB3b3JrKgogICAgICAgIGluIG9mZmxpbmUgbW9kZSAtIElOU0VSVCwgVVBEQVRFIGFuZCBERUxFVEUgc3RhdGVtZW50cyB3aGljaCByZWZlcgogICAgICAgIHRvIGxpdGVyYWwgdmFsdWVzIHdvdWxkIG5lZWQgdG8gcmVuZGVyCiAgICAgICAgaW5saW5lIGV4cHJlc3Npb25zLiAgIEZvciBzaW1wbGUgdXNlIGNhc2VzLCB0aGUKICAgICAgICA6bWV0aDpgLmlubGluZV9saXRlcmFsYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCBmb3IgKipydWRpbWVudGFyeSoqCiAgICAgICAgcXVvdGluZyBvZiBzdHJpbmcgdmFsdWVzLiAgRm9yICJidWxrIiBpbnNlcnRzLCBjb25zaWRlciB1c2luZwogICAgICAgIDptZXRoOmAuYnVsa19pbnNlcnRgLgoKICAgICAgICBGb3IgZXhhbXBsZSwgdG8gZW1pdCBhbiBVUERBVEUgc3RhdGVtZW50IHdoaWNoIGlzIGVxdWFsbHkKICAgICAgICBjb21wYXRpYmxlIHdpdGggYm90aCBvbmxpbmUgYW5kIG9mZmxpbmUgbW9kZTo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkuc3FsIGltcG9ydCB0YWJsZSwgY29sdW1uCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgU3RyaW5nCiAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKCiAgICAgICAgICAgIGFjY291bnQgPSB0YWJsZSgnYWNjb3VudCcsCiAgICAgICAgICAgICAgICBjb2x1bW4oJ25hbWUnLCBTdHJpbmcpCiAgICAgICAgICAgICkKICAgICAgICAgICAgb3AuZXhlY3V0ZSgKICAgICAgICAgICAgICAgIGFjY291bnQudXBkYXRlKCkuXAogICAgICAgICAgICAgICAgICAgIHdoZXJlKGFjY291bnQuYy5uYW1lPT1vcC5pbmxpbmVfbGl0ZXJhbCgnYWNjb3VudCAxJykpLlwKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMoeyduYW1lJzpvcC5pbmxpbmVfbGl0ZXJhbCgnYWNjb3VudCAyJyl9KQogICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgTm90ZSBhYm92ZSB3ZSBhbHNvIHVzZWQgdGhlIFNRTEFsY2hlbXkKICAgICAgICA6ZnVuYzpgc3FsYWxjaGVteS5zcWwuZXhwcmVzc2lvbi50YWJsZWAKICAgICAgICBhbmQgOmZ1bmM6YHNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24uY29sdW1uYCBjb25zdHJ1Y3RzIHRvCiAgICAgICAgbWFrZSBhIGJyaWVmLCBhZC1ob2MgdGFibGUgY29uc3RydWN0IGp1c3QgZm9yIG91ciBVUERBVEUKICAgICAgICBzdGF0ZW1lbnQuICBBIGZ1bGwgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuVGFibGVgIGNvbnN0cnVjdAogICAgICAgIG9mIGNvdXJzZSB3b3JrcyBwZXJmZWN0bHkgZmluZSBhcyB3ZWxsLCB0aG91Z2ggbm90ZSBpdCdzIGEKICAgICAgICByZWNvbW1lbmRlZCBwcmFjdGljZSB0byBhdCBsZWFzdCBlbnN1cmUgdGhlIGRlZmluaXRpb24gb2YgYQogICAgICAgIHRhYmxlIGlzIHNlbGYtY29udGFpbmVkIHdpdGhpbiB0aGUgbWlncmF0aW9uIHNjcmlwdCwgcmF0aGVyCiAgICAgICAgdGhhbiBpbXBvcnRlZCBmcm9tIGEgbW9kdWxlIHRoYXQgbWF5IGJyZWFrIGNvbXBhdGliaWxpdHkgd2l0aAogICAgICAgIG9sZGVyIG1pZ3JhdGlvbnMuCgogICAgICAgIDpwYXJhbSBzcWw6IEFueSBsZWdhbCBTUUxBbGNoZW15IGV4cHJlc3Npb24sIGluY2x1ZGluZzoKCiAgICAgICAgKiBhIHN0cmluZwogICAgICAgICogYSA6ZnVuYzpgc3FsYWxjaGVteS5zcWwuZXhwcmVzc2lvbi50ZXh0YCBjb25zdHJ1Y3QuCiAgICAgICAgKiBhIDpmdW5jOmBzcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLmluc2VydGAgY29uc3RydWN0LgogICAgICAgICogYSA6ZnVuYzpgc3FsYWxjaGVteS5zcWwuZXhwcmVzc2lvbi51cGRhdGVgLAogICAgICAgICAgOmZ1bmM6YHNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24uaW5zZXJ0YCwKICAgICAgICAgIG9yIDpmdW5jOmBzcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLmRlbGV0ZWAgIGNvbnN0cnVjdC4KICAgICAgICAqIFByZXR0eSBtdWNoIGFueXRoaW5nIHRoYXQncyAiZXhlY3V0YWJsZSIgYXMgZGVzY3JpYmVkCiAgICAgICAgICBpbiA6cmVmOmBzcWxleHByZXNzaW9uX3RvcGxldmVsYC4KCiAgICAgICAgOnBhcmFtIGV4ZWN1dGlvbl9v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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 12
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
base.cpython-37.opt-1.pyc
16.26 KB
lrw-r--r--
2023-11-14 11:45:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
base.cpython-37.pyc
16.26 KB
lrw-r--r--
2023-11-14 11:45:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
batch.cpython-37.opt-1.pyc
10.24 KB
lrw-r--r--
2023-11-14 11:45:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
batch.cpython-37.pyc
10.24 KB
lrw-r--r--
2023-11-14 11:45:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ops.cpython-37.opt-1.pyc
66.57 KB
lrw-r--r--
2023-11-14 11:45:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ops.cpython-37.pyc
66.57 KB
lrw-r--r--
2023-11-14 11:45:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
schemaobj.cpython-37.opt-1.pyc
5.95 KB
lrw-r--r--
2023-11-14 11:45:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
schemaobj.cpython-37.pyc
5.95 KB
lrw-r--r--
2023-11-14 11:45:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
toimpl.cpython-37.opt-1.pyc
3.81 KB
lrw-r--r--
2023-11-14 11:45:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
toimpl.cpython-37.pyc
3.81 KB
lrw-r--r--
2023-11-14 11:45:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.opt-1.pyc
339 B
lrw-r--r--
2023-11-14 11:45:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
339 B
lrw-r--r--
2023-11-14 11:45:20
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).