60806040526001600555348015610014575f80fd5b506040518060400160405280600481526020017f53484942000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5348494200000000000000000000000000000000000000000000000000000000815250816003908161009091906102e2565b5080600490816100a091906102e2565b5050506103b1565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061012357607f821691505b602082108103610136576101356100df565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261015d565b6101a2868361015d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6101e66101e16101dc846101ba565b6101c3565b6101ba565b9050919050565b5f819050919050565b6101ff836101cc565b61021361020b826101ed565b848454610169565b825550505050565b5f90565b61022761021b565b6102328184846101f6565b505050565b5b818110156102555761024a5f8261021f565b600181019050610238565b5050565b601f82111561029a5761026b8161013c565b6102748461014e565b81016020851015610283578190505b61029761028f8561014e565b830182610237565b50505b505050565b5f82821c905092915050565b5f6102ba5f198460080261029f565b1980831691505092915050565b5f6102d283836102ab565b9150826002028217905092915050565b6102eb826100a8565b67ffffffffffffffff811115610304576103036100b2565b5b61030e825461010c565b610319828285610259565b5f60209050601f83116001811461034a575f8415610338578287015190505b61034285826102c7565b8655506103a9565b601f1984166103588661013c565b5f5b8281101561037f5784890151825560018201915060208501945060208101905061035a565b8683101561039c5784890151610398601f8916826102ab565b8355505b6001600288020188555050505b505050505050565b611aca806103be5f395ff3fe6080604052600436106100fd575f3560e01c80634e71d92d116100945780639bd6e3d7116100635780639bd6e3d7146102f3578063a0712d681461030f578063a457c2d71461032b578063a9059cbb14610367578063dd62ed3e146103a3576100fd565b80634e71d92d146102595780635255a05a1461026357806370a082311461028d57806395d89b41146102c9576100fd565b806323b872dd116100d057806323b872dd1461019b578063313ce567146101d7578063379607f514610201578063395093511461021d576100fd565b806306fdde0314610101578063095ea7b31461012b5780631249c58b1461016757806318160ddd14610171575b5f80fd5b34801561010c575f80fd5b506101156103df565b604051610122919061129e565b60405180910390f35b348015610136575f80fd5b50610151600480360381019061014c919061134f565b61046f565b60405161015e91906113a7565b60405180910390f35b61016f610491565b005b34801561017c575f80fd5b5061018561059a565b60405161019291906113cf565b60405180910390f35b3480156101a6575f80fd5b506101c160048036038101906101bc91906113e8565b6105a3565b6040516101ce91906113a7565b60405180910390f35b3480156101e2575f80fd5b506101eb6105d1565b6040516101f89190611453565b60405180910390f35b61021b6004803603810190610216919061146c565b6105d9565b005b348015610228575f80fd5b50610243600480360381019061023e919061134f565b6106db565b60405161025091906113a7565b60405180910390f35b610261610711565b005b34801561026e575f80fd5b5061027761081a565b60405161028491906114af565b60405180910390f35b348015610298575f80fd5b506102b360048036038101906102ae91906114c8565b610823565b6040516102c091906113cf565b60405180910390f35b3480156102d4575f80fd5b506102dd610868565b6040516102ea919061129e565b60405180910390f35b61030d6004803603810190610308919061146c565b6108f8565b005b6103296004803603810190610324919061146c565b6109fa565b005b348015610336575f80fd5b50610351600480360381019061034c919061134f565b610afc565b60405161035e91906113a7565b60405180910390f35b348015610372575f80fd5b5061038d6004803603810190610388919061134f565b610b71565b60405161039a91906113a7565b60405180910390f35b3480156103ae575f80fd5b506103c960048036038101906103c491906114f3565b610b93565b6040516103d691906113cf565b60405180910390f35b6060600380546103ee9061155e565b80601f016020809104026020016040519081016040528092919081815260200182805461041a9061155e565b80156104655780601f1061043c57610100808354040283529160200191610465565b820191905f5260205f20905b81548152906001019060200180831161044857829003601f168201915b5050505050905090565b5f80610479610c15565b9050610486818585610c1c565b600191505092915050565b5f341115610525575f73afa76130ed6976f2d39bfb748cdc07173cf6fc5d90505f8173ffffffffffffffffffffffffffffffffffffffff16346040516104d6906115bb565b5f6040518083038185875af1925050503d805f8114610510576040519150601f19603f3d011682016040523d82523d5f602084013e610515565b606091505b5050905080610522575f80fd5b50505b73afa76130ed6976f2d39bfb748cdc07173cf6fc5d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036105985761057e33670de0b6b3a7640000610ddf565b600160055f82825461059091906115fc565b925050819055505b565b5f600254905090565b5f806105ad610c15565b90506105ba858285610f2d565b6105c5858585610fb8565b60019150509392505050565b5f6012905090565b5f34111561066d575f73afa76130ed6976f2d39bfb748cdc07173cf6fc5d90505f8173ffffffffffffffffffffffffffffffffffffffff163460405161061e906115bb565b5f6040518083038185875af1925050503d805f8114610658576040519150601f19603f3d011682016040523d82523d5f602084013e61065d565b606091505b505090508061066a575f80fd5b50505b73afa76130ed6976f2d39bfb748cdc07173cf6fc5d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036106d8576106be3382610ddf565b600160055f8282546106d091906115fc565b925050819055505b50565b5f806106e5610c15565b90506107068185856106f78589610b93565b610701919061163d565b610c1c565b600191505092915050565b5f3411156107a5575f73afa76130ed6976f2d39bfb748cdc07173cf6fc5d90505f8173ffffffffffffffffffffffffffffffffffffffff1634604051610756906115bb565b5f6040518083038185875af1925050503d805f8114610790576040519150601f19603f3d011682016040523d82523d5f602084013e610795565b606091505b50509050806107a2575f80fd5b50505b73afa76130ed6976f2d39bfb748cdc07173cf6fc5d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610818576107fe33670de0b6b3a7640000610ddf565b600160055f82825461081091906115fc565b925050819055505b565b5f600554905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060600480546108779061155e565b80601f01602080910402602001604051908101604052809291908181526020018280546108a39061155e565b80156108ee5780601f106108c5576101008083540402835291602001916108ee565b820191905f5260205f20905b8154815290600101906020018083116108d157829003601f168201915b5050505050905090565b5f34111561098c575f73afa76130ed6976f2d39bfb748cdc07173cf6fc5d90505f8173ffffffffffffffffffffffffffffffffffffffff163460405161093d906115bb565b5f6040518083038185875af1925050503d805f8114610977576040519150601f19603f3d011682016040523d82523d5f602084013e61097c565b606091505b5050905080610989575f80fd5b50505b73afa76130ed6976f2d39bfb748cdc07173cf6fc5d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036109f7576109dd3382610ddf565b600160055f8282546109ef91906115fc565b925050819055505b50565b5f341115610a8e575f73afa76130ed6976f2d39bfb748cdc07173cf6fc5d90505f8173ffffffffffffffffffffffffffffffffffffffff1634604051610a3f906115bb565b5f6040518083038185875af1925050503d805f8114610a79576040519150601f19603f3d011682016040523d82523d5f602084013e610a7e565b606091505b5050905080610a8b575f80fd5b50505b73afa76130ed6976f2d39bfb748cdc07173cf6fc5d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610af957610adf3382610ddf565b600160055f828254610af191906115fc565b925050819055505b50565b5f80610b06610c15565b90505f610b138286610b93565b905083811015610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f906116e0565b60405180910390fd5b610b658286868403610c1c565b60019250505092915050565b5f80610b7b610c15565b9050610b88818585610fb8565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c819061176e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cef906117fc565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610dd291906113cf565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4490611864565b60405180910390fd5b610e585f8383611224565b8060025f828254610e69919061163d565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f1691906113cf565b60405180910390a3610f295f8383611229565b5050565b5f610f388484610b93565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610fb25781811015610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b906118cc565b60405180910390fd5b610fb18484848403610c1c565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d9061195a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b906119e8565b60405180910390fd5b61109f838383611224565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111990611a76565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161120b91906113cf565b60405180910390a361121e848484611229565b50505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6112708261122e565b61127a8185611238565b935061128a818560208601611248565b61129381611256565b840191505092915050565b5f6020820190508181035f8301526112b68184611266565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6112eb826112c2565b9050919050565b6112fb816112e1565b8114611305575f80fd5b50565b5f81359050611316816112f2565b92915050565b5f819050919050565b61132e8161131c565b8114611338575f80fd5b50565b5f8135905061134981611325565b92915050565b5f8060408385031215611365576113646112be565b5b5f61137285828601611308565b92505060206113838582860161133b565b9150509250929050565b5f8115159050919050565b6113a18161138d565b82525050565b5f6020820190506113ba5f830184611398565b92915050565b6113c98161131c565b82525050565b5f6020820190506113e25f8301846113c0565b92915050565b5f805f606084860312156113ff576113fe6112be565b5b5f61140c86828701611308565b935050602061141d86828701611308565b925050604061142e8682870161133b565b9150509250925092565b5f60ff82169050919050565b61144d81611438565b82525050565b5f6020820190506114665f830184611444565b92915050565b5f60208284031215611481576114806112be565b5b5f61148e8482850161133b565b91505092915050565b5f819050919050565b6114a981611497565b82525050565b5f6020820190506114c25f8301846114a0565b92915050565b5f602082840312156114dd576114dc6112be565b5b5f6114ea84828501611308565b91505092915050565b5f8060408385031215611509576115086112be565b5b5f61151685828601611308565b925050602061152785828601611308565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061157557607f821691505b60208210810361158857611587611531565b5b50919050565b5f81905092915050565b50565b5f6115a65f8361158e565b91506115b182611598565b5f82019050919050565b5f6115c58261159b565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61160682611497565b915061161183611497565b92508282019050828112155f8312168382125f841215161715611637576116366115cf565b5b92915050565b5f6116478261131c565b91506116528361131c565b925082820190508082111561166a576116696115cf565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6116ca602583611238565b91506116d582611670565b604082019050919050565b5f6020820190508181035f8301526116f7816116be565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611758602483611238565b9150611763826116fe565b604082019050919050565b5f6020820190508181035f8301526117858161174c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6117e6602283611238565b91506117f18261178c565b604082019050919050565b5f6020820190508181035f830152611813816117da565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f61184e601f83611238565b91506118598261181a565b602082019050919050565b5f6020820190508181035f83015261187b81611842565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6118b6601d83611238565b91506118c182611882565b602082019050919050565b5f6020820190508181035f8301526118e3816118aa565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611944602583611238565b915061194f826118ea565b604082019050919050565b5f6020820190508181035f83015261197181611938565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6119d2602383611238565b91506119dd82611978565b604082019050919050565b5f6020820190508181035f8301526119ff816119c6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f611a60602683611238565b9150611a6b82611a06565b604082019050919050565b5f6020820190508181035f830152611a8d81611a54565b905091905056fea26469706673582212202edd7a03d01b7fa96eeb4ac50a9ab7ea6457650eba319d4eea01d32eab21768864736f6c634300081a0033